/* Animations and other things to update on clock ticks */
GList *tick_callbacks;
+ guint clock_tick_id;
/* A hash by GType key, containing hash tables by widget name
*/
g_slice_free (GtkTickCallbackInfo, info);
}
- if (priv->tick_callbacks == NULL && priv->realized)
+ if (priv->tick_callbacks == NULL && priv->clock_tick_id)
{
GdkFrameClock *frame_clock = gtk_widget_get_frame_clock (widget);
- g_signal_handlers_disconnect_by_func (frame_clock,
- (gpointer) gtk_widget_on_frame_clock_update,
- widget);
+ g_signal_handler_disconnect (frame_clock, priv->clock_tick_id);
+ priv->clock_tick_id = 0;
gdk_frame_clock_end_updating (frame_clock);
}
}
priv = widget->priv;
- if (priv->tick_callbacks == NULL && priv->realized)
+ if (priv->realized && !priv->clock_tick_id)
{
GdkFrameClock *frame_clock = gtk_widget_get_frame_clock (widget);
- g_signal_connect (frame_clock, "update",
- G_CALLBACK (gtk_widget_on_frame_clock_update),
- widget);
+ priv->clock_tick_id = g_signal_connect (frame_clock, "update",
+ G_CALLBACK (gtk_widget_on_frame_clock_update),
+ widget);
gdk_frame_clock_begin_updating (frame_clock);
}
if (GTK_IS_CONTAINER (widget))
_gtk_container_maybe_start_idle_sizer (GTK_CONTAINER (widget));
- if (priv->tick_callbacks != NULL)
+ if (priv->tick_callbacks != NULL && !priv->clock_tick_id)
{
- g_signal_connect (frame_clock, "update",
- G_CALLBACK (gtk_widget_on_frame_clock_update),
- widget);
+ priv->clock_tick_id = g_signal_connect (frame_clock, "update",
+ G_CALLBACK (gtk_widget_on_frame_clock_update),
+ widget);
gdk_frame_clock_begin_updating (frame_clock);
}
if (GTK_IS_CONTAINER (widget))
_gtk_container_stop_idle_sizer (GTK_CONTAINER (widget));
- if (priv->tick_callbacks)
+ if (priv->clock_tick_id)
{
- g_signal_handlers_disconnect_by_func (frame_clock,
- (gpointer) gtk_widget_on_frame_clock_update,
- widget);
+ g_signal_handler_disconnect (frame_clock, priv->clock_tick_id);
+ priv->clock_tick_id = 0;
gdk_frame_clock_end_updating (frame_clock);
}